import logging
import subprocess
import psutil
from airtest.core.api import *

logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)

def check_and_start_app(app_path, window_title_re=".*Cregis.*", max_retries=3):
    """
    检查程序是否运行，如果未运行则启动程序并连接窗口
    :param app_path: 程序完整路径
    :param window_title_re: 窗口标题正则表达式
    :param max_retries: 最大重试次数
    :return: 连接成功的设备对象，失败返回None
    """

    # 首先检查程序是否已经在运行
    app_name = app_path.split("\\")[-1].lower()  # 获取程序名
    is_running = False

    for proc in psutil.process_iter(['name']):
        if proc.info['name'].lower() == app_name:
            is_running = True
            print(f"程序 {app_name} 已在运行")
            break

    # 如果程序未运行，则启动程序
    if not is_running:
        try:
            print(f"正在启动程序: {app_path}")
            subprocess.Popen([app_path])
            # 等待程序启动
            time.sleep(5)
        except Exception as e:
            print(f"启动程序失败: {e}")
            return None

    # 尝试连接程序窗口
    for i in range(max_retries):
        try:
            print(f"第 {i + 1} 次尝试连接窗口...")
            dev = connect_device(f"Windows:///?title_re={window_title_re}")
            print("✅ 程序连接成功！")
            return dev
        except Exception as e:
            print(f"第 {i + 1} 次连接失败: {e}")
            if i < max_retries - 1:  # 不是最后一次重试
                time.sleep(3)  # 等待3秒后重试
            else:
                print("❌ 多次重试后仍无法连接程序窗口")

    return None


# 使用示例
if __name__ == "__main__":
    app_path = r"D:\w\UdunDev\UdunDev.exe"

    # 检查并启动程序
    device = check_and_start_app(app_path)

    if device:
        print("开始执行自动化测试...")
        touch(Template(r"153328.png"))
        sleep(1)
        touch(Template(r"154039.png"))
        sleep(1)
        # 选择商户
        touch(Template(r"tpl1760345484680.png", record_pos=(0.278, -0.0), resolution=(1311, 823))),
        sleep(1.0)
        # 选择登录账号

        # touch(Template(r"tpl1760343404097.png", record_pos=(0.295, 0.029), resolution=(1311, 823)))
        text("Asdfghjkl")
        sleep(1.0)
        # 填写密码

        touch(Template(r"tpl1760343437338.png", record_pos=(0.293, 0.096), resolution=(1311, 823))),
        sleep(1.0)
        # 点击登录

        touch(Template(r"tpl1760346015429.png", record_pos=(-0.47, 0.331), resolution=(1136, 823))),
        sleep(1.0)
        # 进入个人界面

        touch(Template(r"tpl1760346026127.png", record_pos=(-0.184, 0.243), resolution=(1136, 823)))
        # 退出登录
    else:
        print("程序启动或连接失败，无法执行自动化测试")